/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo;

/**
 *
 * @author vanesa
 */
public class Verificar {
    SolucionTablero9x9 sol;
    SolucionTablero6x6 sol2;
    int [][] tabSol;
    
    public Verificar(){}

    /**Constructor:
     * @param tablero "Toma el tablero en el estado actual del juego
     * y se le hace una copia para generar una solucion en un tablero auxiliar.
     * Este constructor toma un tablero de tamaño 9x9 o 6x6."
     */
    public Verificar(int [][] tablero){
       if (tablero.length== 9){
           tabSol= new int [9][9];
           for(int i=0;i<9;i++)
               for(int j=0;j>9;j++)
                   tabSol[i][j]=tablero[i][j];
           sol= new SolucionTablero9x9(tabSol);
            tabSol=sol.Resolver(0, tabSol);
       }
       else{
           tabSol=new int [6][6];
           for(int i=0;i<6;i++)
               for(int j=0;j<6;j++)
                   tabSol[i][j]=tablero[i][j];
            sol2= new SolucionTablero6x6(tabSol);
            tabSol=sol2.Resolver(0, tabSol);
       }
    }
    
    /**SolEqualIni: Este método se encarga de verificar si el tablero pasado
     * como parámetro tiene solución.
     * @param tablero "Tablero en ultimo estado del juego"
     * @return boolean "retorna true si no tiene solución"
     */
    public  boolean SolEqualIni(int [][] tablero){
        boolean equals=false;
        for(int i=0;i<tablero.length;i++)
               for(int j=0;j<tablero.length;j++){
                   if(tablero[i][j]==0)
                    if(tablero[i][j]==tabSol[i][j])
                      equals=true;
               }
        return equals;
    }
    
    

    
    /**VerificarValores: Este método se encarga de verificar que los datos
     * ingresados en el tablero concuerdan con la solución del tablero.
     * @param tablero "Toma el tablero en el estado actual en que se encuentr
     * el juego en ese momento."
     * @return boolean "Retorna true si completó hasta ese momento correctamente
     * los casilleros del Sudoku sino retorna false."
     */
    public boolean VerificarValores(int [][] tablero){
        boolean correcto=true;
        if (tablero.length== 9){
           for(int i=0;i<9;i++)
               for(int j=0;j<9;j++)
                   if(tablero[i][j]!=0)
                        if((tablero[i][j]!=tabSol[i][j])||(this.SolEqualIni(tablero)))
                            correcto=false;
                    
        }
        else{
            for(int i=0;i<6;i++)
               for(int j=0;j<6;j++)
                    if(tablero[i][j]!=0)
                        if((tablero[i][j]!=tabSol[i][j])||(this.SolEqualIni(tablero)))
                            correcto=false;
                   
                           
        }
        return correcto;
        
    } 
    
    
}
